package gui;

import java.util.List;

import modelo.Consulta;
import modelo.Medico;
import modelo.Paciente;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

import aplicacao.Repositorio;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.ModifyEvent;

public class App {

	private Repositorio repositorio = Repositorio.getInstancia();
	protected Shell shlClnica;
	private Table table;
	private Table table_1;
	private Table table_2;
	private Text textBuscaMedico;
	private Text textBuscaPaciente;
	private Text textBuscaConsulta;

	/**
	 * Launch the application.
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			App window = new App();
			window.open();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		shlClnica.open();
		shlClnica.layout();
		while (!shlClnica.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
		shlClnica = new Shell();
		shlClnica.setSize(545, 415);
		shlClnica.setText("Cl\u00EDnica");
		
		TabFolder tabFolder = new TabFolder(shlClnica, SWT.NONE);
		tabFolder.setBounds(10, 10, 509, 356);
		
		TabItem tbtmMdicos = new TabItem(tabFolder, SWT.NONE);
		tbtmMdicos.setText("M\u00E9dicos");
		
		Composite composite = new Composite(tabFolder, SWT.NONE);
		tbtmMdicos.setControl(composite);
		
		Label lblTodosOsMdicos = new Label(composite, SWT.NONE);
		lblTodosOsMdicos.setBounds(10, 10, 96, 15);
		lblTodosOsMdicos.setText("Todos os M\u00E9dicos");
		
		table = new Table(composite, SWT.BORDER | SWT.FULL_SELECTION);
		table.setBounds(10, 31, 481, 256);
		table.setHeaderVisible(true);
		table.setLinesVisible(true);
		
		TableColumn tblclmnId = new TableColumn(table, SWT.NONE);
		tblclmnId.setWidth(25);
		tblclmnId.setText("ID");
		
		TableColumn tblclmnNome = new TableColumn(table, SWT.NONE);
		tblclmnNome.setWidth(100);
		tblclmnNome.setText("Nome");
		
		TableColumn tblclmnEspecialidade = new TableColumn(table, SWT.NONE);
		tblclmnEspecialidade.setWidth(100);
		tblclmnEspecialidade.setText("Especialidade");
		
		TableColumn tblclmnIncioDoAtendimento = new TableColumn(table, SWT.NONE);
		tblclmnIncioDoAtendimento.setWidth(115);
		tblclmnIncioDoAtendimento.setText("In\u00EDcio do Atend.");
		
		TableColumn tblclmnFinalDoAtendimento = new TableColumn(table, SWT.NONE);
		tblclmnFinalDoAtendimento.setWidth(115);
		tblclmnFinalDoAtendimento.setText("Final do Atend.");
		
		Button btnAdicionarMedico = new Button(composite, SWT.NONE);
		btnAdicionarMedico.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				MedicoAdicionar medicoAdicionar = new MedicoAdicionar();
				medicoAdicionar.open();
			}
		});
		btnAdicionarMedico.setBounds(10, 293, 75, 25);
		btnAdicionarMedico.setText("Adicionar");
		
		final Button btnEditar_1 = new Button(composite, SWT.NONE);
		btnEditar_1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				if (btnEditar_1.isEnabled()) {
					int idSelecionado = Integer.parseInt(table.getSelection()[0].getText(0));
					MedicoEditar medicoEditar = new MedicoEditar(idSelecionado);
					medicoEditar.open();
				}
			}
		});
		btnEditar_1.setEnabled(false);
		btnEditar_1.setBounds(91, 293, 75, 25);
		btnEditar_1.setText("Editar");
		
		final Button btnExcluir_1 = new Button(composite, SWT.NONE);
		btnExcluir_1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				if (btnExcluir_1.isEnabled()) {
					int idSelecionado = Integer.parseInt(table.getSelection()[0].getText(0));
					try {
						repositorio.getMedicoBusiness().excluir(idSelecionado);
					} catch (Exception e) {
						e.printStackTrace();
					}
					
					List<Medico> medicos = repositorio.getMedicoBusiness().listar();
					
					table.removeAll();
					
					for (Medico medico : medicos) {
						if (medico.getNome().contains( textBuscaMedico.getText() )) {
							TableItem tableItem = new TableItem(table, SWT.NONE);
							tableItem.setText(new String[] {
								Integer.toString(medico.getId()),
								medico.getNome(),
								medico.getEspecialidade(),
								medico.getInicioHorarioAtendimento().toString(),
								medico.getFimHorarioAtendimento().toString()
							});
						}
					}					
				}
			}
		});
		btnExcluir_1.setEnabled(false);
		btnExcluir_1.setBounds(172, 293, 75, 25);
		btnExcluir_1.setText("Excluir");
		
		textBuscaMedico = new Text(composite, SWT.BORDER);
		textBuscaMedico.addModifyListener(new ModifyListener() {
			public void modifyText(ModifyEvent arg0) {
				List<Medico> medicos = repositorio.getMedicoBusiness().listar();
				
				table.removeAll();
				
				for (Medico medico : medicos) {
					if (medico.getNome().contains( textBuscaMedico.getText() )) {
						TableItem tableItem = new TableItem(table, SWT.NONE);
						tableItem.setText(new String[] {
							Integer.toString(medico.getId()),
							medico.getNome(),
							medico.getEspecialidade(),
							medico.getInicioHorarioAtendimento().toString(),
							medico.getFimHorarioAtendimento().toString()
						});
					}
				}
			}
		});
		textBuscaMedico.setBounds(355, 4, 136, 21);
		
		Label lblBuscar = new Label(composite, SWT.NONE);
		lblBuscar.setBounds(314, 8, 35, 15);
		lblBuscar.setText("Buscar");
		
		TabItem tbtmPacientes = new TabItem(tabFolder, SWT.NONE);
		tbtmPacientes.setText("Pacientes");
		
		Composite composite_1 = new Composite(tabFolder, SWT.NONE);
		tbtmPacientes.setControl(composite_1);
		
		Label lblTodosOsPacientes = new Label(composite_1, SWT.NONE);
		lblTodosOsPacientes.setBounds(10, 10, 108, 15);
		lblTodosOsPacientes.setText("Todos os Pacientes");
		
		table_1 = new Table(composite_1, SWT.BORDER | SWT.FULL_SELECTION);
		table_1.setBounds(10, 31, 481, 256);
		table_1.setHeaderVisible(true);
		table_1.setLinesVisible(true);
		
		TableColumn tblclmnId_1 = new TableColumn(table_1, SWT.NONE);
		tblclmnId_1.setWidth(25);
		tblclmnId_1.setText("ID");
		
		TableColumn tblclmnNome_1 = new TableColumn(table_1, SWT.NONE);
		tblclmnNome_1.setWidth(150);
		tblclmnNome_1.setText("Nome");
		
		TableColumn tblclmnDataDeNascimento = new TableColumn(table_1, SWT.NONE);
		tblclmnDataDeNascimento.setWidth(119);
		tblclmnDataDeNascimento.setText("Data de Nascimento");
		
		Button btnAdicionarPaciente = new Button(composite_1, SWT.NONE);
		btnAdicionarPaciente.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				PacienteAdicionar pacienteAdicionar = new PacienteAdicionar();
				pacienteAdicionar.open();
			}
		});
		btnAdicionarPaciente.setBounds(10, 293, 75, 25);
		btnAdicionarPaciente.setText("Adicionar");
		
		final Button btnEditar_2 = new Button(composite_1, SWT.NONE);
		btnEditar_2.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				if (btnEditar_2.isEnabled()) {
					int idSelecionado = Integer.parseInt(table_1.getSelection()[0].getText(0));
					PacienteEditar pacienteEditar = new PacienteEditar(idSelecionado);
					pacienteEditar.open();
				}
			}
		});
		btnEditar_2.setEnabled(false);
		btnEditar_2.setBounds(91, 293, 75, 25);
		btnEditar_2.setText("Editar");
		
		final Button btnExcluir_2 = new Button(composite_1, SWT.NONE);
		btnExcluir_2.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				if (btnExcluir_2.isEnabled()) {
					int idSelecionado = Integer.parseInt(table_1.getSelection()[0].getText(0));
					repositorio.getPacienteBusiness().remover(idSelecionado);
					
					List<Paciente> pacientes = repositorio.getPacienteBusiness().listar();
					
					table_1.removeAll();
					
					for (Paciente paciente : pacientes) {
						if (paciente.getNome().contains( textBuscaPaciente.getText() )) {
							TableItem tableItem = new TableItem(table_1, SWT.NONE);
							tableItem.setText(new String[] {
								Integer.toString(paciente.getId()),
								paciente.getNome(),
								paciente.getDataNascimento().toString()
							});		
						}		
					}					
				}
			}
		});
		btnExcluir_2.setEnabled(false);
		btnExcluir_2.setBounds(172, 293, 75, 25);
		btnExcluir_2.setText("Excluir");
		
		Label label = new Label(composite_1, SWT.NONE);
		label.setText("Buscar");
		label.setBounds(314, 8, 35, 15);
		
		textBuscaPaciente = new Text(composite_1, SWT.BORDER);
		textBuscaPaciente.addModifyListener(new ModifyListener() {
			public void modifyText(ModifyEvent arg0) {
				
				List<Paciente> pacientes = repositorio.getPacienteBusiness().listar();
				
				table_1.removeAll();
				
				for (Paciente paciente : pacientes) {
					if (paciente.getNome().contains( textBuscaPaciente.getText() )) {
						TableItem tableItem = new TableItem(table_1, SWT.NONE);
						tableItem.setText(new String[] {
							Integer.toString(paciente.getId()),
							paciente.getNome(),
							paciente.getDataNascimento().toString()
						});			
					}
				}
				
			}
		});
		textBuscaPaciente.setBounds(355, 4, 136, 21);
		
		TabItem tbtmConsultas = new TabItem(tabFolder, SWT.NONE);
		tbtmConsultas.setText("Consultas");
		
		Composite composite_2 = new Composite(tabFolder, SWT.NONE);
		tbtmConsultas.setControl(composite_2);
		
		Label lblTodasAsConsultas = new Label(composite_2, SWT.NONE);
		lblTodasAsConsultas.setBounds(10, 10, 109, 15);
		lblTodasAsConsultas.setText("Todas as Consultas");
		
		table_2 = new Table(composite_2, SWT.BORDER | SWT.FULL_SELECTION);
		table_2.setBounds(10, 31, 481, 256);
		table_2.setHeaderVisible(true);
		table_2.setLinesVisible(true);
		
		TableColumn tblclmnId_2 = new TableColumn(table_2, SWT.NONE);
		tblclmnId_2.setWidth(25);
		tblclmnId_2.setText("ID");
		
		TableColumn tblclmnMdico = new TableColumn(table_2, SWT.NONE);
		tblclmnMdico.setWidth(100);
		tblclmnMdico.setText("M\u00E9dico");
		
		TableColumn tblclmnPaciente = new TableColumn(table_2, SWT.NONE);
		tblclmnPaciente.setWidth(100);
		tblclmnPaciente.setText("Paciente");
		
		TableColumn tblclmnData = new TableColumn(table_2, SWT.NONE);
		tblclmnData.setWidth(100);
		tblclmnData.setText("Data");
		
		TableColumn tblclmnHora = new TableColumn(table_2, SWT.NONE);
		tblclmnHora.setWidth(100);
		tblclmnHora.setText("Hora");
		
		Button btnMarcarConsulta = new Button(composite_2, SWT.NONE);
		btnMarcarConsulta.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				ConsultaAdicionar consultaAdicionar = new ConsultaAdicionar();
				consultaAdicionar.open();
			}
		});
		btnMarcarConsulta.setBounds(10, 293, 109, 25);
		btnMarcarConsulta.setText("Marcar Consulta");
		
		final Button btnEditar = new Button(composite_2, SWT.NONE);
		btnEditar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				if (btnEditar.isEnabled()) {
					int idSelecionado = Integer.parseInt(table_2.getSelection()[0].getText(0));
					ConsultaEditar consultaEditar = new ConsultaEditar(idSelecionado);
					consultaEditar.open();
				}
			}
		});
		btnEditar.setEnabled(false);
		btnEditar.setBounds(125, 293, 75, 25);
		btnEditar.setText("Editar");
		
		final Button btnExcluir = new Button(composite_2, SWT.NONE);
		btnExcluir.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				if (btnExcluir.isEnabled()) {
					int idSelecionado = Integer.parseInt(table_2.getSelection()[0].getText(0));
					Consulta consultaRemover = repositorio.getConsultaBusinenss().buscar(idSelecionado);
					repositorio.getConsultaBusinenss().remover(consultaRemover);
					
					List<Consulta> consultas = repositorio.getConsultaBusinenss().listar();
					
					table_2.removeAll();
					
					for (Consulta consulta : consultas) {
						if (consulta.getMedico().contains( textBuscaConsulta.getText() )) {
							TableItem tableItem = new TableItem(table_2, SWT.NONE);
							tableItem.setText(new String[] {
								Integer.toString(consulta.getId()),
								consulta.getMedico(),
								consulta.getPaciente().toString(),
								consulta.getData().toString(),
								consulta.getHora().toString()
							});		
						}		
					}
				}
			}
		});
		btnExcluir.setEnabled(false);
		btnExcluir.setBounds(206, 293, 75, 25);
		btnExcluir.setText("Excluir");
		
		textBuscaConsulta = new Text(composite_2, SWT.BORDER);
		textBuscaConsulta.addModifyListener(new ModifyListener() {
			public void modifyText(ModifyEvent arg0) {

				List<Consulta> consultas = repositorio.getConsultaBusinenss().listar();
				
				table_2.removeAll();
				
				for (Consulta consulta : consultas) {
					if (consulta.getMedico().contains( textBuscaConsulta.getText() )) {
						TableItem tableItem = new TableItem(table_2, SWT.NONE);
						tableItem.setText(new String[] {
							Integer.toString(consulta.getId()),
							consulta.getMedico(),
							consulta.getPaciente().toString(),
							consulta.getData().toString(),
							consulta.getHora().toString()
						});		
					}		
				}
			}
		});
		textBuscaConsulta.setBounds(355, 4, 136, 21);
		
		Label lblBuscarPorPaciente = new Label(composite_2, SWT.NONE);
		lblBuscarPorPaciente.setText("Buscar por paciente");
		lblBuscarPorPaciente.setBounds(245, 8, 104, 15);

		table.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				int index = table.getSelectionIndex();
				if (index > -1) {
					btnEditar_1.setEnabled(true);
					btnExcluir_1.setEnabled(true);
				} else {
					btnEditar_1.setEnabled(false);
					btnExcluir_1.setEnabled(false);					
				}
			}
		});
		
		table_1.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				int index = table_1.getSelectionIndex();
				if (index > -1) {
					btnEditar_2.setEnabled(true);
					btnExcluir_2.setEnabled(true);
				} else {
					btnEditar_2.setEnabled(false);
					btnExcluir_2.setEnabled(false);
				}
			}
		});
		
		table_2.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseDown(MouseEvent arg0) {
				int index = table_2.getSelectionIndex();
				if (index > -1) {
					btnEditar.setEnabled(true);
					btnExcluir.setEnabled(true);
				} else {
					btnEditar.setEnabled(false);
					btnExcluir.setEnabled(false);
				}
			}
		});
		
		shlClnica.addShellListener(new ShellAdapter() {
			@Override
			public void shellActivated(ShellEvent arg0) {
				List<Medico> medicos = repositorio.getMedicoBusiness().listar();
				
				table.removeAll();
				
				for (Medico medico : medicos) {
					if (medico.getNome().contains( textBuscaMedico.getText() )) {
						TableItem tableItem = new TableItem(table, SWT.NONE);
						tableItem.setText(new String[] {
							Integer.toString(medico.getId()),
							medico.getNome(),
							medico.getEspecialidade(),
							medico.getInicioHorarioAtendimento().toString(),
							medico.getFimHorarioAtendimento().toString()
						});
					}
				}
				
				List<Paciente> pacientes = repositorio.getPacienteBusiness().listar();
				
				table_1.removeAll();
				
				for (Paciente paciente : pacientes) {
					if (paciente.getNome().contains( textBuscaPaciente.getText() )) {
						TableItem tableItem = new TableItem(table_1, SWT.NONE);
						tableItem.setText(new String[] {
							Integer.toString(paciente.getId()),
							paciente.getNome(),
							paciente.getDataNascimento().toString()
						});			
					}
				}
				
				List<Consulta> consultas = repositorio.getConsultaBusinenss().listar();
				
				table_2.removeAll();
				
				for (Consulta consulta : consultas) {
					if (consulta.getMedico().contains( textBuscaConsulta.getText() )) {
						TableItem tableItem = new TableItem(table_2, SWT.NONE);
						tableItem.setText(new String[] {
							Integer.toString(consulta.getId()),
							consulta.getMedico(),
							consulta.getPaciente().toString(),
							consulta.getData().toString(),
							consulta.getHora().toString()
						});		
					}		
				}
				
				int index = table.getSelectionIndex();
				if (index > -1) {
					btnEditar_1.setEnabled(true);
					btnExcluir_1.setEnabled(true);
				} else {
					btnEditar_1.setEnabled(false);
					btnExcluir_1.setEnabled(false);					
				}
				
				index = table_1.getSelectionIndex();
				
				if (index > -1) {
					btnEditar_2.setEnabled(true);
					btnExcluir_2.setEnabled(true);
				} else {
					btnEditar_2.setEnabled(false);
					btnExcluir_2.setEnabled(false);
				}
				
				index = table_2.getSelectionIndex();
				if (index > -1) {
					btnEditar.setEnabled(true);
					btnExcluir.setEnabled(true);
				} else {
					btnEditar.setEnabled(false);
					btnExcluir.setEnabled(false);
				}
			}
		});
	}
}
